home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2007 December / PCWKCD1207B.iso / Blogowanie poza sfera / Flock 0.9.1.3 stable / flock-0.9.1.3.en-US.win32.exe / flock / components / flockShelfService.js < prev    next >
Text File  |  2007-10-12  |  7KB  |  254 lines

  1. // BEGIN FLOCK GPL
  2. // 
  3. // Copyright Flock Inc. 2005-2007
  4. // http://flock.com
  5. // 
  6. // This file may be used under the terms of of the
  7. // GNU General Public License Version 2 or later (the "GPL"),
  8. // http://www.gnu.org/licenses/gpl.html
  9. // 
  10. // Software distributed under the License is distributed on an "AS IS" basis,
  11. // WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  12. // for the specific language governing rights and limitations under the
  13. // License.
  14. // 
  15. // END FLOCK GPL
  16. //
  17.  
  18. const FLOCK_SHELF_CID               = Components.ID('{ee266aa8-bc64-4e6a-9a20-1143b0444fbd}');
  19.  
  20. const nsISupports                   = Components.interfaces.nsISupports;
  21. const nsIClassInfo                  = Components.interfaces.nsIClassInfo;
  22. const flockIShelfService            = Components.interfaces.flockIShelfService;
  23.  
  24. const FLOCK_SHELF_CONTRACTID        = '@mozilla.org/rdf/datasource;1?name=flock-shelf';
  25.  
  26. const FLOCK_NS                      = 'http://flock.com/rdf#';
  27. const FLOCK_SHELF_ROOT              = 'urn:flock:shelfroot';
  28.  
  29. //Interfaces
  30. const nsIFactory                    = Components.interfaces.nsIFactory;
  31.  
  32.  
  33. function flockShelfService() {
  34.   this._coop = Components.classes['@flock.com/singleton;1'].getService(Components.interfaces.flockISingleton).getSingleton('chrome://browser/content/flock/common/load-faves-coop.js').wrappedJSObject;
  35.  
  36.   this.shelfRoot = this._coop.get(FLOCK_SHELF_ROOT);
  37.   if (!this.shelfRoot) {
  38.     this.shelfRoot = new this._coop.Folder(FLOCK_SHELF_ROOT);
  39.     this._coop.favorites_root.children.add(this.shelfRoot);
  40.   }
  41. }
  42.  
  43.  
  44. // Shelf Interface Implementation
  45. flockShelfService.prototype.elementsCount = function () {
  46.   var cnt=0;
  47.  
  48.   var e = this.shelfRoot.children.enumerate();
  49.   while (e.hasMoreElements()) {
  50.     e.getNext();
  51.     cnt++;
  52.   }
  53.  
  54.   return cnt;
  55. }
  56.  
  57. flockShelfService.prototype.insert = function (aTitle, aContent, aUrl, aType, aPos, aParent) {
  58.   var date = new Date();
  59.   var id = FLOCK_SHELF_ROOT + ':obj_' + Date.now() + ":" + Math.round(100*Math.random());
  60.  
  61.   var parentNode = aParent?this._coop.get(aParent):this.shelfRoot;
  62.   var item = new this._coop.WebSnippet(id,
  63.     {
  64.       content: aContent, 
  65.       name: aTitle, 
  66.       creationDate: date, 
  67.       URL: aUrl, 
  68.       snippetType: aType
  69.     });
  70.   item.save(); 
  71.  
  72.   if (aPos < 0)
  73.     parentNode.children.add(item);
  74.   else
  75.     parentNode.children.insertAt(item, aPos);
  76.  
  77.   this._refreshCount(parentNode);
  78.   return id;
  79. }
  80.  
  81.  
  82. flockShelfService.prototype.createFolder = function (aName) {
  83.   var id = FLOCK_SHELF_ROOT + ':folder:' + aName;
  84.   var folder = new this._coop.Folder(id, {name: aName});
  85.  
  86.   this.shelfRoot.children.add(folder);
  87.  
  88.   return id;
  89. }
  90.  
  91. flockShelfService.prototype.moveTo = function (aId, aFolder) {
  92.   var folderId = FLOCK_SHELF_ROOT + ':folder:' + aFolder;
  93.   var item = this._coop.get(aId);
  94.   if (!item) {
  95.     debug("*** ERROR: Can't find "+aId+"\n");
  96.     return;
  97.   }
  98.   var folder = this._coop.get(folderId); 
  99.   if (!folder) {
  100.     this.createFolder(aFolder);
  101.     folder = this._coop.get(folderId); 
  102.   }
  103.  
  104.   if (folder.children.indexOf(item) > 0)
  105.     return; // Already in the folder
  106.  
  107.   var parent = item.getParent();
  108.   parent.children.remove(item);
  109.   folder.children.add(item);
  110.  
  111.   this._refreshCount(parent);
  112.   this._refreshCount(folder);
  113. }
  114.  
  115. flockShelfService.prototype.changeAttribute = function (aUrn, aAttribute, aValue){
  116.   var snippet = this._coop.get(aUrn);
  117.   snippet[aAttribute] = aValue;
  118.   snippet.save();
  119. }
  120.  
  121. flockShelfService.prototype.getPositionOf = function (aUrn){
  122.   var snippet = this._coop.get(aUrn);
  123.   var parent = snippet.getParent()
  124.   return parent.children.indexOf(snippet);
  125. }
  126.  
  127. flockShelfService.prototype.getTargetOf = function (aUrn, aTarget) {
  128.   var snippet = this._coop.get(aUrn);
  129.   if (snippet)
  130.     return snippet[aTarget];
  131.   else
  132.     return null;
  133. }
  134.  
  135. flockShelfService.prototype.remove = function (aUrn) {
  136.   var snippet = this._coop.get(aUrn);
  137.   var parent = snippet.getParent();
  138.   parent.children.remove(snippet);
  139.   this._refreshCount(parent);
  140.  
  141.   snippet.destroy();
  142. }
  143.  
  144. flockShelfService.prototype._refreshCount = function (aFolder) {
  145.   if (!aFolder.children)
  146.     return;
  147.  
  148.   var count = 0;
  149.   var _enum = aFolder.children.enumerate();
  150.   while (_enum.hasMoreElements()) {
  151.     _enum.getNext();
  152.     ++count;
  153.   }
  154.   aFolder.count = count;
  155. }
  156.  
  157.  
  158. flockShelfService.prototype.clear =
  159. function () {
  160.   var e = this.shelfRoot.children.enumerate();
  161.   var elts = [];
  162.   while (e.hasMoreElements())
  163.     elts.push(e.getNext());
  164.   while (elts.length > 0){
  165.     var elt = elts.pop();
  166.     this.shelfRoot.children.remove(elt);
  167.     elt.destroy();
  168.   }
  169. }
  170.  
  171.  
  172. function loadSubScript(spec)
  173. {
  174.   var loader = Components.classes['@mozilla.org/moz/jssubscript-loader;1']
  175.      .getService(Components.interfaces.mozIJSSubScriptLoader);
  176.   var context = {};
  177.   loader.loadSubScript(spec, context);
  178.   return context;
  179. }
  180.  
  181. var Coop = loadSubScript('chrome://browser/content/flock/common/coop.js').Coop;
  182.  
  183. /////////////////////////////////////////////////////////////////////
  184. // XPCOM Registration
  185. /////////////////////////////////////////////////////////////////////
  186.  
  187. flockShelfService.prototype.flags = nsIClassInfo.Singleton;
  188. flockShelfService.prototype.classDescription = "Flock Shelf Service";
  189. flockShelfService.prototype.getInterfaces = function (count) {
  190.   var interfaceList = [flockIShelfService, nsIClassInfo];
  191.   count.value = interfaceList.length;
  192.   return interfaceList;
  193. }
  194. flockShelfService.prototype.getHelperForLanguage = function (count) {return null;}
  195.  
  196. // the nsISupports implementation
  197. flockShelfService.prototype.QueryInterface =
  198. function (iid) {
  199.   if (!iid.equals(flockIShelfService) && 
  200.     !iid.equals(nsIClassInfo) &&
  201.     !iid.equals(nsISupports))
  202.     throw Components.results.NS_ERROR_NO_INTERFACE;
  203.   return this;
  204. }
  205.  
  206. // Module implementation/*{{{*/
  207. var ShelfModule = new Object();
  208.  
  209. ShelfModule.registerSelf =
  210. function (compMgr, fileSpec, location, type) {
  211.   compMgr = compMgr.QueryInterface(Components.interfaces.nsIComponentRegistrar);
  212.  
  213.   compMgr.registerFactoryLocation(FLOCK_SHELF_CID, 
  214.                                   "Flock Shelf JS Component",
  215.                                   FLOCK_SHELF_CONTRACTID, 
  216.                                   fileSpec, 
  217.                                   location,
  218.                                   type);
  219. }
  220.  
  221. ShelfModule.getClassObject =
  222. function (compMgr, cid, iid) {
  223.   if (!cid.equals(FLOCK_SHELF_CID))
  224.     throw Components.results.NS_ERROR_NO_INTERFACE;
  225.     
  226.   if (!iid.equals(Components.interfaces.nsIFactory))
  227.     throw Components.results.NS_ERROR_NOT_IMPLEMENTED;
  228.     
  229.   return ShelfServiceFactory;
  230. }
  231.  
  232. ShelfModule.canUnload =
  233. function(compMgr) {
  234.   //gPhotoService.dataSource.Flush();
  235.   return true;
  236. }
  237.     
  238. /* factory object */
  239. var ShelfServiceFactory = new Object();
  240.  
  241. ShelfServiceFactory.createInstance =
  242. function (outer, iid) {
  243.   if (outer != null)
  244.     throw Components.results.NS_ERROR_NO_AGGREGATION;
  245.  
  246.   return (new flockShelfService()).QueryInterface(iid);
  247. }
  248.  
  249. /* entrypoint */
  250. function NSGetModule(compMgr, fileSpec) {
  251.     return ShelfModule;
  252. }
  253.  
  254.